import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:张熳
 * Date:2025-10-23
 * Time:15:38
 */
public class Test {
    public static void main(String[] args) {
        //双端队列 Deque
        //LinkedList-基于双链表实现 双端链表
        Deque<Integer> queue = new LinkedList<>();//双端队列链式实现，它可以当作链表、栈、队列、双端队列
        //ArrayDeque-基于循环数组实现 双端队列
        Deque<Integer> queue0 = new ArrayDeque<>();//双端队列线性实现，它可以当作顺序表、栈、队列、双端队列

        //使用链式或线性实现队列
        Queue<Integer> queue1 = new ArrayDeque<>();//基于数组的队列-基于循环队列原理实现的，但是更先进
        Queue<Integer> queue2 = new LinkedList<>();//基于链表的队列

        //ArrayDeque当作栈
        ArrayDeque<Integer> stack = new ArrayDeque<>();
    }
    public static void main3(String[] args) {
        //设计循环队列 - 数组实现
        MyCircularQueue queue = new MyCircularQueue(3);
        System.out.println(queue.enQueue(1));//true
        System.out.println(queue.enQueue(2));//true
        System.out.println(queue.enQueue(3));//true
        System.out.println(queue.enQueue(4));//false
        System.out.println(queue.Front());
        System.out.println(queue.Rear());
        queue.deQueue();
        System.out.println(queue.Front());
    }
    public static void main2(String[] args) {
        //模拟实现队列
        MyQueue queue = new MyQueue();
        queue.offer(12);
        queue.offer(23);
        queue.offer(34);
        queue.offer(45);
        queue.offer(56);

        System.out.println("将队头元素"+queue.poll()+"出队");
        System.out.println("将队头元素"+queue.poll()+"出队");

        System.out.println("此时的队头元素："+queue.peek());
    }
    public static void main1(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        //offer() - 在队尾入队列
        queue.offer(12);
        queue.offer(23);
        queue.offer(34);
        queue.offer(45);
        queue.offer(56);
        System.out.println(queue.offer(67));//true
        System.out.println(queue);//[12, 23, 34, 45, 56, 67]

        System.out.println("出队列前的元素个数："+queue.size());
        //poll() - 在队头出队列
        System.out.println("将队头元素"+queue.poll()+"出队列");
        System.out.println("此时队列中的元素："+queue);
        System.out.println("出队列后的元素个数："+queue.size());
        //peek() - 获取队头元素
        System.out.println("此时的队头元素："+queue.peek());
    }
}
